package com.neusoft.service;

import com.neusoft.entity.Register;
import com.neusoft.utils.Result;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author akemihomurasama
 */
public interface RegisterService {
    /**
     * 查询所有患者信息
     *
     * @return 患者信息列表
     */
    Result queryAllRegister();

    /**
     * 添加患者信息
     *
     * @param register 患者信息
     * @return 添加结果
     */
    Result addPatient(Register register);

    /**
     * 根据医生查询患者
     *
     * @param employeeId 医生id
     * @return 患者列表
     */
    Result queryPatientByDoc(String employeeId);

    /**
     * 根据医生id分页查询患者信息
     *
     * @param employeeId  医生id
     * @param currentPage 当前页码
     * @param pageSize    每页数量
     * @return 患者列表
     */
    Result queryPatientByDocPage(String employeeId, int currentPage, int pageSize);

    /**
     * 根据患者信息查询患者列表
     *
     * @param register 患者信息
     * @param employeeId 医生id
     * @return 患者列表
     */
    Result queryPatientByCondition(Register register, int employeeId);

    /**
     * 根据患者病历号更改患者状态为2
     *
     * @param caseNumber 患者病历号
     * @return 更新成功信息
     */
    Result updatePatientState(String caseNumber);

    /**
     * 根据患者病历号查询患者信息
     *
     * @param caseNumber 患者病历号
     * @return 患者信息
     */
    Result queryPatientByCaseNum(String caseNumber);

    /**
     * 根据患者看诊状态和医生id查询患者列表
     *
     * @param visitState 患者看诊状态
     * @param employeeId 医生id
     * @return 患者列表
     */
    Result queryRegisterByStateAndDoc(int visitState, int employeeId);

    /**
     * 根据患者姓名或病历号查询患者信息
     *
     * @param register 患者相关信息
     * @return 患者信息
     */
    Result queryPatientByNameOrCaseNum(Register register);

    /**
     * 根据患者id和医技项目id列表更新申请为已付款
     *
     * @param registerId 患者id
     * @param techIdList 医技项目id
     * @return 更新结果
     */
    Result updateReqState(int registerId, List<Integer> techIdList);

    /**
     * 根据接诊状态和id分页查询查询患者信息列表
     *
     * @param visitState     接诊状态
     * @param registerIdList 患者id列表
     * @param currentPage    当前页数
     * @param pageSize       每页数量
     * @return 患者信息列表
     */
    Result queryPatientByStateAndId(int visitState,
                                    List<Integer> registerIdList,
                                    int currentPage, int pageSize);

    /**
     * 分页查询所有患者信息
     *
     * @param currentPage 当前页码
     * @param pageSize    每页数量
     * @return 患者列表
     */
    Result queryRegisterByPage(int currentPage, int pageSize);

    /**
     * 查询患者总数
     *
     * @return 患者总数
     */
    Result queryPatientCount();

    /**
     * 根据看诊状态分页查询患者信息
     *
     * @param state       看诊状态
     * @param currentPage 当前页码
     * @param pageSize    每页条数
     * @return 患者信息列表
     */
    Result queryPatientByStateAndPage(int state, int currentPage, int pageSize);

    /**
     * 根据患者姓名、病历号和查询已挂号的患者信息
     *
     * @param register 患者查询条件
     * @return 结果列表
     */
    Result queryPatientRefund(Register register);
    /**
     * 患者退号后修改患者看诊状态为已退号
     * @param caseNumber 病历号
     * @return 修改结果
     */
    Result patientRefund(String caseNumber);
    /**
     * 根据条件查询患者数量
     * @param register 查询条件
     * @return 患者数量
     */
    Result queryCountByCondition(Register register);

    /**
     * 患者完成看诊，设置患者状态为看诊结束
     * @param caseNumber 患者病历id
     * @return 修改结果
     */
    Result patientAccomplish(String caseNumber);
}
